home *** CD-ROM | disk | FTP | other *** search
- COMMENT " Routine KEYSCAN returns scan code and ASCII code
- (if any) for each keystroke, until Ctrl-Brk.
-
- Author: Ted Mirecki June 1984
- "
- ASMUTIL SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:ASMUTIL, DS:ASMUTIL
- ORG 100H
- KEYSCAN PROC
- JMP SHORT PASTDATA
- KEYCODE DB ?,?,?,?,0DH,0AH,'$'
- MSG DB 'Strike any key, Ctrl-Break to exit',0DH,0AH
- DB '$'
-
- PASTDATA: MOV DX,OFFSET MSG ;ISSUE SIGN-ON MESSAGE
- MOV AH,9
- INT 21H
-
- GETKB: SUB AX,AX ;READ THE KEYBOARD
- INT 16H ;WAIT FOR KEYSTROKE
- MOV DI,OFFSET KEYCODE ;POINT TO CHAR AREA
- CALL AX2HEX
- MOV DX,OFFSET KEYCODE ;DISPLAY HEX CHARACTERS
- MOV AH,9
- INT 21H
- JMP GETKB ;GO GET NEXT KEYSTROKE
- KEYSCAN ENDP
- ASMUTIL ENDS
-
-
- COMMENT " Routine AX2HEX converts value in AX to 4 hex chars.
-
- Author: Ted Mirecki January 1984
-
- INPUT: Value to be converted in AX.
- ES:DI points to buffer to receive characters
- (Length 4 bytes).
-
- OUTPUT: 4 hex characters (0 - F) in output buffer.
- DI points 1 byte past last character.
- AX destroyed, other regs unchanged.
- "
- ASMUTIL SEGMENT BYTE PUBLIC 'CODE'
- ASSUME CS:ASMUTIL
- AX2HEX PROC NEAR
- PUBLIC AX2HEX
-
- CLD ;GO FORWARD THRU STRINGS
- PUSH BX ;SAVE RESGISTERS
- PUSH CX
- PUSH DX
- MOV BX,OFFSET HEX ;POINT TO HEX DIGIT CHARS
- MOV CX,4 ;WILL HANDLE 4 NIBBLES
-
- NEXTNIBL: ROL AX,1 ;HI-ORDER NIBBLE TO
- ROL AX,1 ;LO-ORDER OF AX
- ROL AX,1
- ROL AX,1
- MOV DX,AX ;SAVE IT IN DX
- AND AL,0FH ;ISOLATE LOW-ORDER NIBBLE
- XLAT CS:HEX ;TRANSLATE TO HEX DIGIT
- STOSB ;PUT HEX DIGIT INTO OUTPUT
- MOV AX,DX ;RECOVER AX VALUE
- LOOP NEXTNIBL ;REPEAT FOR 4 NIBBLES
-
- POP DX ;RESTORE REGS & EXIT
- POP CX
- POP BX
- RET
- AX2HEX ENDP
- HEX DB '0123456789ABCDEF'
- ASMUTIL ENDS
- END KEYSCAN